<?
if (preg_match("#" . basename(__FILE__) . "#", $_SERVER['PHP_SELF'])) {
	die('This page cannot be called directly.') ;
}

class ajax_hotel {
	function playme(){
        $code = Url::getParam('code');
        //yêu cầu đặt tên $code=tên của method trong class
        if (method_exists($this, $code)) {
            $this->$code();
        }else{
            $this->home();
        }
	}
	
	function home(){
		global $display;
		die("Nothing to do...");
	}
	
	function del_hotel()
	{
		if(!User::is_login()){
			echo "not_login";
			exit;
		}
		
        if(!User::have_permit("hotel_delete")){
            echo "no_perm";
            exit;
        }

		$hotel_id= (int)Url::get("id");
		
		if($hotel_id)
		{
			$hotel 	= Db_Hotel::getHotelById($hotel_id);
		
			if($hotel && $hotel['status'] != -1)//check quyền và ks có tồn tại
			{
				if(Db_Hotel::delHotelById($hotel_id))
				{
	                echo "success";
	                exit;
	            }
			}
			else{
				echo "no_perm";
				exit;
			}
		}
		
		echo "un_success";
	}

    function del_hotels_selected()
    {
		if(!User::is_login())
		{
			echo "not_login";
			exit;
		}

        if(!User::have_permit("hotel_delete"))
        {
            echo "no_perm";
            exit;
        }

		$hotel_ids= Url::get("selected_ids");

		if(is_array($hotel_ids))
		{
            $error = false;

            foreach($hotel_ids as $id)
            {
                if(!Db_Hotel::delHotelById($id))
                {
                    $error = true;
                }
            }

            if($error)
            {
                echo "un_success";
            }
            else{
                echo "success";
            }
		}
		else
		{
            echo "not_item";
        }
	}

    function del_policy_hotels_selected(){
        if(!User::is_login()){
            echo "not_login";
            exit;
        }

        if(!User::have_permit("hotel_delete")){
            echo "no_perm";
            exit;
        }

        $hotel_ids= Url::get("selected_ids");

        if(is_array($hotel_ids)){
            $error = false;

            foreach($hotel_ids as $id)
            {
                if(!Db_HotelPolicy::delById($id)){
                    $error = true;
                }
            }

            if($error){
                echo "un_success";
            }else{
                echo "success";
            }
        }
        else{
            echo "not_item";
        }
    }

    function booking_room_list()
    {
        $hotel_id = Url::getInt('hotel_id', 0);
        
        if($hotel_id) {
            $rs = new stdClass();
            $rs->rooms = Db_Room::selectRooms('id, name, price, total_room', '', 'status=1 AND hotel_id='.$hotel_id);
            $rs->type = 0;
            $rs->sysmsg = 'success';
            echo json_encode($rs);
            return;
        }
        echo json_encode(array('type'=>1, 'sysmsg'=>'not found', 'msg'=>'Không còn phòng trống.'));
    }

    function deal_room_list()
    {
        $hotel_id = Url::getInt('hotel_id', 0);

        if($hotel_id) {
            $room_id = Url::getInt('room_id', 0);
            $rs = new stdClass();
            $rs->rooms = Db_Room::selectRooms('id, name, price, total_room', '', $room_id?'id='. $room_id:'status=1 AND hotel_id='.$hotel_id);
            $rs->type = 0;
            $rs->sysmsg = 'success';
            echo json_encode($rs);
            return;
        }
        echo json_encode(array('type'=>1, 'sysmsg'=>'not found', 'msg'=>'Không còn phòng trống.'));
    }

    function change_lock_status_room()
    {
		if(!User::is_login())
		{
			echo "not_login";
            exit;
		}
		
		$room_id 	= Url::getInt("room_id");
		$day 		= Url::getInt("day");
        $total_room = Url::getInt("total_room");
        
        if($room_id)
        {
	        if(mktime(0,0,0,date('m',$day),date('d',$day),date('Y',$day)) == $day)//Check ngày theo chuẩn
	        {
	        	//Check ngày là quá khứ thì ko cập nhật
	        	if(mktime(0,0,0,date('m',$day),date('d',$day),date('Y',$day)) >= mktime(0,0,0,date('m',TIME_NOW),date('d',TIME_NOW),date('Y',TIME_NOW)))
	        	{
	        		$room = Db_Room::getRoomById($room_id);
	        		
	        		if($room)
	        		{
	        			if($room['hotel_id'])
	        			{
	        				$hotel = Db_Hotel::getHotelById($room['hotel_id']);
	        				
	        				if($hotel)
		        			{
		        				if(User::have_permit("admin_room_status") || Db_Hotel::have_permit_manage($hotel, User::id()))
		        				{
						        	if(Db_RoomStatus::changeLockRoomStatus($room_id,$day,$total_room))
							        {
							            echo "success";
							            return;
							        }
						        }
						        else
						        {
						        	 echo "no_perm";
           							 exit;
						        }
					        }
				        }
			        }
		        }
		        else//Ngày đã qua
		        {
		        	echo "day_over";
		        	return ;
		        }
	        }
	        else//Ngày sai định dạng
	        {
	        	echo "time_error";
	        	return ;
	        }
        }

        
        echo "un_success";
	}
    function add_room_expand(){
        if(!User::is_login()){
            echo "not_login";
            exit;
        }

        $room_id 	= Url::getInt("room_id");
        $day_start 		= Url::get("date_start");
        $day_end = Url::get("date_end");
        $total_room = Url::getInt("total_room");
//var_dump($day_start, $day_end,$room_id);
        if($room_id){
            $get_from_date = explode('/',$day_start);
            //var_dump($get_from_date);
            //$int_from_date = strtotime($get_from_date[1].'-'.$get_from_date[0].'-'.$get_from_date[2]);
            $int_from_date = mktime((int)0,(int)0,(int)0,(int)$get_from_date[0],(int)$get_from_date[1],(int)$get_from_date[2]);
            $get_to_date = explode('/',$day_end);
            //var_dump($get_to_date);
            //$int_to_date = strtotime($get_to_date[1].'-'.$get_to_date[0].'-'.$get_to_date[2]);
            $int_to_date = mktime((int)0,(int)0,(int)0,(int)$get_to_date[0],(int)$get_to_date[1],(int)$get_to_date[2]);
            if( $int_from_date <= $int_to_date){//Check ngày theo chuẩn
                //Check ngày là quá khứ thì ko cập nhật
                if($int_from_date >= TIME_NOW){
                    // check có bị confict ngày ko?
                    $data = DB::exists("SELECT id FROM room_available_expand WHERE room_id=$room_id AND date >= $int_from_date AND date <= $int_to_date", __FILE__ . ' line ' . __LINE__);
                   //var_dump($data);
                    if($data == false){
                        $room = Db_Room::getRoomById($room_id);
                        if($room){
                            if($room['hotel_id']){
                                $hotel = Db_Hotel::getHotelById($room['hotel_id']);
                                if($hotel){
                                    if(User::have_permit("admin_room_status") || Db_Hotel::have_permit_manage($hotel, User::id())){                                     //
                                        $new = array();
                                        $new['room_id'] = $room_id;
                                        $new['total'] = $total_room;
                                        $new['status'] = 1;
                                      //  var_dump($int_from_date,$int_to_date);
                                        for ($i = $int_from_date; $i <=$int_to_date; $i += 24 * 60 * 60) {
                                            $new['date'] = $i;
                                     //      var_dump($i);
                                            DB::insert('room_available_expand',$new, __FILE__ . ' line ' . __LINE__);

                                        }
                                        die;
                                    }else{
                                        echo "no_perm";
                                        exit;
                                    }
                                }
                            }
                        }
                    }else{
                        echo "conflict";
                        return ;
                    }

                }else{//Ngày đã qua
                    echo "day_over";
                    return ;
                }
            }else{//Ngày sai định dạng
                echo "time_error";
                return ;
            }
        }
        echo "un_success";
    }
    function add_room_more(){
            
            if(!User::is_login())
        {
            echo "not_login";
            exit;
        }
        $room_id = Url::getInt('room');
        $ngay = Url::get('ngay','');
        $nam = Url::get('nam','');
        $sophong = Url::getInt('sophong',0);
//var_dump($day_start, $day_end,$room_id);
        if($room_id)
        {
            $get_date = explode('/',$ngay);
            $int_date = mktime("0","0","0",$get_date[1],$get_date[0],$nam);
                //Check ngày là quá khứ thì ko cập nhật
                if($int_date >= strtotime(date('d-m-Y')))
                {
                    // check có bị confict ngày ko?
                    $data = DB::exists("SELECT id,total FROM room_available_expand WHERE room_id=$room_id AND date = $int_date", __FILE__ . ' line ' . __LINE__);
                   //var_dump($data);
                    if($data == false){
                        $room = Db_Room::getRoomById($room_id);
                        if($room)
                        {
                            if($room['hotel_id'])
                            {
                                $hotel = Db_Hotel::getHotelById($room['hotel_id']);

                               $hotel_ids = Db_Hotel::get_hotel_ids(User::id());
                                $arr_hotelId = explode(',',$hotel_ids);
                                if($hotel)
                                {
                                    if(User::have_permit("admin_room_status") || in_array($room['hotel_id'], $arr_hotelId))
                                    {
                                        //
                                        $new = array();
                                        $new['room_id'] = $room_id;
                                        $new['total'] = $sophong;
                                        $new['status'] = 1;
                                        $new['date'] = $int_date;
                                        if(DB::insert('room_available_expand',$new, __FILE__ . ' line ' . __LINE__))
                                                echo 'success';
                                            else {
                                                echo 'database';
                                            }
                                    }
                                    else
                                    {
                                        echo "no_perm";
                                        exit;
                                    }
                                }
                            }
                        }
                    }else{
                        //update
                        $update = array();
                        $update['total'] = ($sophong+$data['total']);
                        if(DB::update('room_available_expand', $update, 'id = '.$data['id']))
                            echo 'success';
                        else echo 'database';
                        //echo "conflict";
                        return ;
                        exit;
                    }

                }
                else//Ngày đã qua
                {
                    echo "day_over";
                    return ;
                }
        }
    }
    function check_room_status(){
        $room_id = Url::getInt('room_id', 0);
        if($room_id) {
            $number_room = 999999;
            $enddate = strtotime(Url::get('enddate'));
            $startdate = strtotime(Url::get('startdate'));
            $removeroom = json_decode(Url::get('removeroom'));
            $roomStatus = Db_RoomStatus::getRoomStatusByRoomId($room_id, $enddate, $startdate);
            if($roomStatus && is_array($roomStatus) && count($roomStatus)>0) {
                foreach($roomStatus as $rs) {
                    if($rs['is_lock']) {
                        $number_room = 0;
                        break;
                    }else {
                        if($removeroom && count($removeroom)>0) {
                            foreach($removeroom as $v){
                                $v[0] = strtotime($v[0]);
                                $v[1] = strtotime($v[1]);
                                if($rs['day']>=$v[0] && $rs['day']<$v[1]) {
                                    $rs['available']+=(int)$v[2];
                                }
                            }
                        }
                        if($number_room>$rs['available']){
                            $number_room=$rs['available'];
                        }
                    }
                }
            }
            $room_prices = array();
            if($number_room>0) {
                $prices = Db_RoomPrice::getRoomPricesByRoomIdAndDates($room_id, $startdate, $enddate, 1);
                $date_step = $startdate;
                if($prices) {
                    foreach($prices as $price) {
                        if(($dates=(floor(($price['date_start'] - $date_step))/86400))>0) {
                            $room_prices[] = array($dates, Db_RoomPrice::getDefaultRoomPriceById($room_id));
                        }
                        $date_e = min($enddate, $price['date_end']);
                        $date_s = max($startdate, $price['date_start']);
                        $room_prices[] = array(floor(($date_e - $date_s)/86400)+1, $price['price']);
                        $date_step=$date_e+86400;
                    }
                    if(($dates=(floor(($enddate - $date_step))/86400))>0) {
                        $room_prices[] = array($dates-1, Db_RoomPrice::getDefaultRoomPriceById($room_id));
                    }
                } else {
                    $room_prices[] = array(floor(($enddate - $startdate)/86400), Db_RoomPrice::getDefaultRoomPriceById($room_id));
                }
            }
        } else $number_room = 0;
        $rs = new stdClass();
        $rs->type = 0;
        $rs->sysmsg = 'success';
        $rs->number_room = $number_room;
        $rs->room_prices = $room_prices;
        echo json_encode($rs);
    }

    function getDataForMap()
    {
        $id = Url::getInt('id', 0);
        $type = Url::get('type');
        $val = '{"data":[';
        if($type == 'hotel'){
            $this_hotel = Db_Hotel::getHotelById($id);
            $this_img = Db_Image::selectImages('id, img_name, img_url, img_server', '', "id =". $this_hotel['image_default']);
            $this_img = Db_Hotel::getImageUrl($this_img[$this_hotel['image_default']], 100);
            $val .= '{"rank": 0,
                        "id": '. $this_hotel['id'] .',
                        "name":"'. $this_hotel['name'] .'",
                        "slug":"'. $this_hotel['slug'] .'",
                        "address":"'. $this_hotel['address'] .'",
                        "img":"'. $this_img .'",
                        "type":"hotel",
                        "latitude":'. $this_hotel['latitude'] .',
                        "longitude": '. $this_hotel['longitude'] .',
                        "star": '. $this_hotel['star'] .'},';
            $city_hotel = Db_Hotel::getAllHotelNearBy($this_hotel['latitude'], $this_hotel['longitude'], 2, $id);
        }elseif($type == 'city'){
            $this_hotel = Db_Location::getLocationById($id);
            $this_hotel['city_id'] = $id;
            $val .= '{"name":"'. $this_hotel['name'] .'",
                        "latitude":'. $this_hotel['latitude'] .',
                        "type":"city",
                        "star":0,
                        "address":"",
                        "longitude": '. $this_hotel['longitude'] .'},';
            $city_hotel = Db_Hotel::getAllHotelNearBy($this_hotel['latitude'], $this_hotel['longitude'], 2);
        }else{ //travel
            $this_hotel = Db_News::getNewsById($id);
            $val .= '{"name":"'. $this_hotel['tittle'] .'",
                        "latitude":'. $this_hotel['latitude'] .',
                        "type":"travel",
                        "star":0,
                        "address":"",
                        "longitude": '. $this_hotel['longitude'] .'},';
            $city_hotel = Db_Hotel::getAllHotelNearBy($this_hotel['latitude'], $this_hotel['longitude'], 2);
        }

        //Lấy thông tin các khách sạn ở gần
        $lengh = 0;
        $imgsDefault = array();
        $url = array();
        if (!empty($city_hotel) && is_array($city_hotel)){
            foreach($city_hotel as $h){
                $imgsDefault[] = $h['image_default'];
            }
            if ($imgsDefault) {
                $imgsDefault = join(',', $imgsDefault);
                $imgs = Db_Image::selectImages('id, img_name, img_url, img_server', '', "id IN ($imgsDefault)");
                foreach ($imgs as &$i) {
                    $url[$i['id']] = Db_Hotel::getImageUrl($i, 100);
                }
            }

            $lengh = sizeof($city_hotel);
            foreach($city_hotel as $h){
                $rank = $h['id'];
                $val .= '{"rank":'. $rank .',
                            "id": '. $h['id'] .',
                            "name":"'. $h['name'] .'",
                            "slug":"'. $h['slug'] .'",
                            "address":"'. $h['address'] .'",
                            "img":"'. $url[$h['image_default']] .'",
                            "type":"hotel",
                            "latitude":'. $h['latitude'] .',
                            "longitude": '. $h['longitude'] .',
                            "star": '. $h['star'] .'},';
            }
        }

        $val = substr_replace($val ,"",-1);
        $val .= '], "lengh":'. $lengh .'}';

//        $val = 'abc';
        echo $val;
    }

    function getDataForMapByLatLng()
    {
        $lat = Url::get('lat');
        $lng = Url::get('lng');
        $val = '{"data":[';
        $city_hotel = Db_Hotel::getAllHotelNearBy($lat, $lng, 2);
        $imgsDefault = array();
        $url = array();

        //Lấy thông tin các khách sạn ở gần
        if (!empty($city_hotel) && is_array($city_hotel)){
            foreach($city_hotel as $h){
                $imgsDefault[] = $h['image_default'];
            }
            if ($imgsDefault) {
                $imgsDefault = join(',', $imgsDefault);
                $imgs = Db_Image::selectImages('id, img_name, img_url, img_server', '', "id IN ($imgsDefault)");
                foreach ($imgs as &$i) {
                    $url[$i['id']] = Db_Hotel::getImageUrl($i, 100);
                }
            }

            $lengh = sizeof($city_hotel);
            foreach($city_hotel as $h){
                $rank = $h['id'];
                $val .= '{"rank":'. $rank .',
                            "id": '. $h['id'] .',
                            "name":"'. $h['name'] .'",
                            "slug":"'. $h['slug'] .'",
                            "address":"'. $h['address'] .'",
                            "img":"'. $url[$h['image_default']] .'",
                            "type":"hotel",
                            "latitude":'. $h['latitude'] .',
                            "longitude": '. $h['longitude'] .',
                            "star": '. $h['star'] .'
                            },';
            }
        }

        $val = substr_replace($val ,"",-1);
        $val .= '], "lengh":'. $lengh .'}';
        echo $val;
    }
}
?>